// 对axios做二次封装，方便请求接口
import axios from 'axios'

// 导出基准地址，原因：其他地方不是通过axios发请求的地方用上基准地址
export const baseURL = 'http://localhost:3000'
const request = axios.create({
  // axios 的一些配置，baseURL  timeout
  baseURL,
  // 请求的超时时间
  timeout: 5000
})

// 添加请求拦截器
request.interceptors.request.use(config => {
    // 在发送请求之前做些什么,比如需要登录才能发起的请求，可以在请求头中添加token
    return config
  },
  error => {
    // 对请求错误做些什么,通过Promise.reject()返回，那么将来在使用时可以使用catch来捕获异常
    return Promise.reject(error)
  })

// 添加响应拦截器
request.interceptors.response.use(response => {
    // 响应状态码2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    return response.data
  },
  error => {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    // 通过Promise.reject() 返回， 那么将来在使用时可以使用catch来捕获异常
    return Promise.reject(error)
  })

// 请求的工具类
// url：请求的地址；method:请求方式；submitData: 请求的数据，必须是一个对象
export default (url, method, submitData) => {
  // 负责发请求：请求地址，请求方式，提交的数据
  /* method = method.toLowerCase()
  if (method === 'get') {
    return request({
      url, // 请求的url地址
      method, // 请求方式
      // get请求
      params: submitData
    })
  } else {
    return request({
      url, // 请求的url地址
      method, // 请求方式
      // post/put请求
      data: submitData
    })
  } */
  return request({
    url,
    method,
    [method.toLowerCase() === 'get' ? 'params' : 'data']: submitData
  })
}
